Programmierung von CAx-Systemen

David Straub

CAx-Programmierung – D. Straub

Gliederung

  1. Einführung
  2. Topologie
  3. Geometrie
  4. Modellierungsstrategien
  5. Datenaustausch
  6. Simulation
  7. Optimierung
  8. Fertigung
CAx-Programmierung – D. Straub

Geometrie I: Kurven und Koordinatensysteme

  • Geometrie im B-Rep
  • Parametrische Darstellung
  • Koordinatensysteme und Transformationen
  • Analytische Kurven: Linie, Kreis, Ellipse
  • Beispiel: Versatz einer Kurve
CAx-Programmierung – D. Straub

Rückblick: Geometrie im B-Rep

CAx-Programmierung – D. Straub

Was steckt hinter einer Kante?

Letzte Vorlesung: das B-Rep-Gerüst

Solid → Shell → Face → Wire → Edge → Vertex

Topologie beschreibt die Struktur – aber noch nicht die Form.

Geometrie beantwortet: wo und wie liegt ein Element im Raum?

Topologieelement trägt als Geometrie
Vertex Punkt
Edge parametrische Kurve + Parameterintervall
Face parametrische Fläche + Parameterbereich
CAx-Programmierung – D. Straub

Geometrie im B-Rep ablesen

geom_type verrät, welche Geometrie OCCT einem Element intern zuordnet:

Element geom_type charakteristische Größe
Kreiskante (Deckel/Boden) CIRCLE Radius, Mittelpunkt
Nahtkante (Mantellinie) LINE Richtungsvektor
Mantelfläche CYLINDER Achse, Radius
Deckel-/Bodenfläche PLANE Normalenvektor, Ursprung
zyl = bd.Cylinder(radius=10, height=20)
for e in zyl.edges():
    print(e.geom_type, round(e.length, 2))
# → CIRCLE 62.83  /  CIRCLE 62.83  /  LINE 20.0
CAx-Programmierung – D. Straub

Parametrische Darstellung

CAx-Programmierung – D. Straub

Drei Darstellungsformen

Wie lässt sich ein geometrisches Objekt mathematisch beschreiben?

Form Kreis (Beispiel) Problem
Explizit mehrwertig; versagt bei senkrechter Tangente
Implizit schwer auszuwerten; kein natürlicher Startpunkt
Parametrisch universell, eindeutig auswertbar

CAD-Systeme verwenden ausschließlich die parametrische Darstellung – für Kurven und Flächen.

CAx-Programmierung – D. Straub

Parametrische Kurven

Eine Kurve im 3D-Raum als Funktion eines Parameters :

Abgeleitete Größen:

  • Tangentenvektor:

    Richtung und „Geschwindigkeit" entlang der Kurve

  • Krümmung:

    Wie stark biegt die Kurve? Kehrwert des Krümmungsradius.

CAx-Programmierung – D. Straub

Der Parameterraum

u:   0.0       0.25      0.5       0.75      1.0
     ●─────────●─────────●─────────●─────────●
     C(0)                C(½)               C(1)
  • Der Parameter läuft gleichmäßig von bis
  • Die Punkte im Raum sind dabei nicht gleichmäßig verteilt
  • Kreis: – der Parameter entspricht dem Winkel

In build123d: position_at(t) mit liefert den Punkt, tangent_at(t) den Tangentenvektor.

CAx-Programmierung – D. Straub

Parametrische Flächen

Flächen sind Funktionen von zwei Parametern und :

Der Normalenvektor ergibt sich aus den Tangenten in - und -Richtung:

→ Vorzeichen bestimmt, welche Seite „außen" ist (erinnert an Orientierung aus VL2)

Die Flächentypen (Ebene, Zylinder, NURBS-Flächen, …) sind Thema von Vorlesung 4.

CAx-Programmierung – D. Straub

Koordinatensysteme und Transformationen

CAx-Programmierung – D. Straub

Vektoren, Achsen, Ebenen

Drei Grundobjekte für die Arbeit im Raum:

Klasse Bedeutung Beispiel
Vector Punkt oder freier Vektor Vector(1, 2, 3)
Axis Ursprung + Richtung (Achse) Axis((0,0,0), (0,0,1))
Plane Ebene: Ursprung + Orientierung Plane.XY

Auf Vector sind die üblichen Operationen definiert: Addition, Skalierung, Länge (v.length), Normierung, Skalarprodukt (v.dot(w)), Kreuzprodukt (v.cross(w)).

CAx-Programmierung – D. Straub

Standardachsen und Standardebenen

Vordefinierte Achsen: Axis.X, Axis.Y, Axis.Z (Weltkoordinatensystem)

Vordefinierte Ebenen:

Ebene Normalenrichtung Verwendung
Plane.XY -Achse Standard-Skizzierebene
Plane.XZ -Achse Frontansicht
Plane.YZ -Achse Seitenansicht

Benutzerdefiniert:

  • Axis((5, 3, 0), (0, 0, 1)) – Achse durch beliebigen Punkt
  • Plane(origin=(0,0,10), z_dir=(1,0,0)) – Ebene mit beliebiger Normalen
CAx-Programmierung – D. Straub

Location: Lage eines Objekts im Raum

Jedes Objekt hat eine Location – seine Position und Orientierung im Weltkoordinatensystem.

Eine Location kodiert:

  • Translation: Verschiebung
  • Rotation: Orientierung (als Quaternion / Rotationsmatrix gespeichert)

Location ist das lokale Koordinatensystem eines Objekts relativ zur Welt.

Kann aus einem Punkt (Location((20, 10, 5))) oder aus einer Ebene (Location(Plane.XZ)) erzeugt werden.

CAx-Programmierung – D. Straub

Transformationen

Operation Methode
Verschiebung obj.move(Location((dx, dy, dz)))
Drehung obj.rotate(Axis.Z, winkel_grad)
Spiegelung obj.mirror(Plane.XZ)
Skalierung obj.scale(faktor)

Wichtig: Jede Transformation liefert ein neues Objekt – das Original bleibt unverändert.

Transformationen lassen sich verketten:
zyl.rotate(Axis.Z, 30).move(Location((20, 0, 0)))

CAx-Programmierung – D. Straub

Drehungen im Raum

Eine Drehung im 3D-Raum ist durch Achse + Winkel vollständig beschrieben:

  • : Einheitsvektor der Drehachse (beliebig im Raum)
  • : Drehwinkel (im Uhrzeigersinn von oben, Rechte-Hand-Regel)

Intern wird daraus eine Rotationsmatrix berechnet, die auf jeden Punkt angewendet wird:

# Drehung um die Z-Achse, 45°
zyl.rotate(Axis.Z, 45)

# Drehung um eine beliebige Achse durch Punkt (5, 0, 0)
zyl.rotate(Axis((5, 0, 0), (0, 0, 1)), 30)
CAx-Programmierung – D. Straub

Reihenfolge von Transformationen

Translationen kommutieren – die Reihenfolge ist egal:

Rotationen kommutieren nicht – die Reihenfolge ist entscheidend:

Rotation + Translation kommutieren ebenfalls nicht:

→ Bei verketteten Transformationen immer auf die Reihenfolge achten.

CAx-Programmierung – D. Straub

Ebene aus einer Fläche

Ein besonders nützliches Muster: Konstruktionsebene direkt aus einer vorhandenen Fläche ableiten.

ebene = Plane(oberseite)   # Ursprung + Orientierung der Fläche

Die Ebene übernimmt automatisch den Flächenmittelpunkt als Ursprung und die Flächennormale als -Richtung.

Anwendung: Bohrung senkrecht auf einer schrägen Fläche – die Skizze wird auf der Fläche platziert, unabhängig von deren Lage im Raum.

CAx-Programmierung – D. Straub

Kurventypen

CAx-Programmierung – D. Straub

Analytische Kurven

Exakt durch eine geschlossene Formel beschreibbar:

Typ geom_type Vorkommen
Linie LINE Kanten eines Quaders
Kreis CIRCLE Kanten eines Zylinders
Ellipse wie Kreis, aber ELLIPSE Kegelschnitte

Für Standardkörper (Box, Cylinder, Sphere, …) reichen analytische Kurven vollständig aus.

CAx-Programmierung – D. Straub

Krümmung einer Kurve

Die Krümmung beschreibt, wie stark sich eine Kurve biegt:

  • : Krümmungsradius – Radius des anliegenden Kreises
  • Gerade: (unendlich flach)
  • Kreis (Radius ): überall konstant

Die Krümmungsverteilung entscheidet, wie geometrische Operationen (Versatz, Abrundung, Sweep) auf eine Kurve wirken.

CAx-Programmierung – D. Straub

Ellipse: variable Krümmung

An den vier Scheitelpunkten:

Stelle
Ende der großen Halbachse () (flach)
Ende der kleinen Halbachse () (stark gebogen)

→ Die Ellipse hat keine konstante Krümmung – im Gegensatz zum Kreis.

CAx-Programmierung – D. Straub

Beispiel: Versatz einer Kurve

CAx-Programmierung – D. Straub

Was ist ein Versatz (Offset)?

Eine Versatzkurve entsteht, indem jeder Punkt der Originalkurve um eine konstante Distanz entlang des Normalenvektors verschoben wird:

Typische CAD-Anwendungen:

  • Wanddicke bei Dünnwandteilen
  • Freiraum um ein Bauteil (Kollisionsprüfung)
  • Werkzeugpfad beim Fräsen
CAx-Programmierung – D. Straub

Versatz eines Kreises

Kreis (Radius ): alle Normalen zeigen durch den Mittelpunkt → der Versatz verschiebt den Radius gleichmäßig.

Grund: Konstante Krümmung → Normalen drehen gleichmäßig → Versatz ändert nur den Radius.

CAx-Programmierung – D. Straub

Versatz einer Ellipse

Ellipse (, ): Normalen drehen ungleichmäßig – die Krümmung variiert.

Die Versatzkurve lässt sich nicht als schreiben:

ellipse = bd.Edge.make_ellipse(x_radius=30, y_radius=15)
offset  = ellipse.offset_2d(5)
for e in offset.edges():
    print(e.geom_type)   # → OFFSET

OCCT berechnet den Versatz numerisch als Offset-Kurve – keine analytische Ellipse mehr.

CAx-Programmierung – D. Straub

Warum ist die Versatzkurve keine Ellipse mehr?

Bei konstanter Krümmung (Kreis) wirkt der Versatz überall gleich.
Bei variabler Krümmung (Ellipse) wirkt er ungleichmäßig:

  • Stark gebogene Stellen (kleiner ): Versatz „staucht“ die Kurve
  • Flache Stellen (großer ): Versatz ändert die Form kaum

Geometrische Operationen erzeugen häufig Kurven höherer Komplexität als die Eingabe —
selbst bei einfachen Ausgangskurven.

Daher brauchen CAD-Systeme eine Darstellung, die beliebige glatte Kurven beschreiben kann.

CAx-Programmierung – D. Straub

Zusammenfassung

CAx-Programmierung – D. Straub

Kernkonzepte dieser Vorlesung

  • Edge trägt eine Kurve , Face trägt eine Fläche
  • Parametrische Darstellung: universell, eindeutig auswertbar
  • Tangente und Krümmung aus Ableitungen
  • Vector, Axis, Plane, Location – räumliches Handwerkszeug; Transformationen erzeugen neue Objekte
  • Analytische Kurven (Linie, Kreis, Ellipse): exakt, aber begrenzt
  • Geometrische Operationen erzeugen komplexere Geometrie: Versatz einer Ellipse → keine Ellipse mehr
CAx-Programmierung – D. Straub

Ausblick: Geometrie II

  • Freiformkurven: Bézier, B-Spline, NURBS
  • Stetigkeitsbedingungen: beim Verbinden von Kurven
  • Flächen: analytisch, Sweep-Flächen, NURBS-Flächen
  • Geometrische Anfragen: Projektion, Abstand, Schnittpunkte
CAx-Programmierung – D. Straub